package cn.fl.project.service;

import java.util.List;

import cmm.mid.core.framework.page.DataResultVO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.project.condition.PrjPrdPaySchDQueryCondition;
import cn.fl.project.dto.PrjPrdPaySchDDTO;
import cn.fl.project.vo.PrjPrdPaySchDVO;
import cn.fl.project.vo.PrjPrdPaySchMVO;

/**
 * @Description: 项目产品支付表主明细信息 客户端服务层接口
 * 业务层方法名称前缀：
 * 新增：add*
 * 删除：remove*
 * 修改：modify*
 * 批量：batch*
 * 查询对象：select* get*
 * 查询集合：search*
 */
public interface IPrjPrdPaySchDService {
	
	/**
	 * 获取唯一对象
	 * @param id 主键
	 * @return 对象DTO
	 */
	public PrjPrdPaySchDVO selectById(Long id) throws BaseException;
	
	/**
	 * 新增
	 * @param entity
	 * @return
	 */
    public Long add(PrjPrdPaySchDVO entity) throws BaseException;
    
    /**
     * 批量删除
     * @param ids
     * @return
     */
    public boolean removeByIds(List<Long> ids) throws BaseException;

    /**
     * 修改
     * @param entity
     * @return
     */
    public boolean modify(PrjPrdPaySchDVO entity) throws BaseException;

    /**
     * 分页查询所有
     * @param page
     * @return
     */
    public Pager searchListPage(Pager page) throws BaseException;
    
    /**
     * 根据条件查询所有
     * @param condition
     * @return
     */
    public List<PrjPrdPaySchDVO> searchList(PrjPrdPaySchDQueryCondition condition) throws BaseException;
    
    /**
     * 提前结清期次处理
     * @param condition
     * @return
     */
    public List<PrjPrdPaySchDVO> searchListByPayPd(PrjPrdPaySchDQueryCondition condition) throws BaseException;
   
    /**
     * 添加风险保证金
     * @param detail
     * @return
     * @throws BaseException
     */
	public DataResultVO addPrjPrdPayRickDep(PrjPrdPaySchDVO detail)throws BaseException;

	/**
	 * 删除结清费用项
	 * @param paySchId
	 * @param idsList
	 * @return
	 * @throws BaseException
	 */
	Long removeSettFeeList(Long paySchId, List<Long> idsList) throws BaseException;

	/**
	 * 添加结清费用项
	 * @param entityList
	 * @throws BaseException
	 */
	public Long addSettFeeList(List<PrjPrdPaySchDVO> entityList,Long setAmt,Long paySchId)throws BaseException;

	/**
	 * 添加或删除结清费用项
	 * @param paySchId
	 * @param changeList
	 * @return
	 * @throws BaseException
	 */
	boolean addOrRemoveSettFeeList(Long paySchId, List<PrjPrdPaySchDDTO> changeList) throws BaseException;
	/**
	 * 查询结清费用项信息
	 * @param page
	 * @return
	 * @throws BaseException
	 */
	public Pager searchSettFeeListPage(Pager page)throws BaseException;
	
	/**
	 * 查询临时状态的支付表信息
	 * @param paySchId
	 * @param flowDelStatus
	 * @return
	 * @throws BaseException
	 */
	public List<PrjPrdPaySchDVO> selectPaySchByDelStatusAndPaySchId(Long paySchId, Integer flowDelStatus)throws  BaseException;
	/**
	 * 根据挂靠公司ID查询该挂靠公司当前的敞口金额
	 * @param compId
	 * @return
	 * @throws BaseException
	 */
	public Long searchCurrLnkCompCrAmtByLnkId(Long compId)throws  BaseException;
	/**
	 * 修改结清费用金额
	 * @param setAmt
	 * @param payId
	 * @throws BaseException
	 */
	public void modifySettAmt(Long setAmt, Long payId)throws  BaseException;
	/**
	 * 批量保存没用明细
	 * @param entityList
	 * @param 
	 * @throws BaseException
	 */
	public void addSettFeeList(List<PrjPrdPaySchDVO> entityList)throws  BaseException;
	/**
	 * 获取借款未核销金额合计
	 * @param pay
	 */
	public void computeLoanArAmt(PrjPrdPaySchMVO pay,String paySchId);
    
}
